// import com.alibaba.druid.DbType;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.SQLIndex;
// import com.alibaba.druid.sql.ast.statement.SQLTableConstraint;
// import com.alibaba.druid.sql.ast.statement.SQLUnique;
// import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint;
// import com.alibaba.druid.sql.dialect.ads.visitor.AdsVisitor;
// import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include <string>
#include "../../../ast/statement/SQLUnique.h"
#include "../../../ast/statement/SQLUniqueConstraint.h"
#include "../../../ast/statement/SQLTableConstraint.h"
#include "../../../ast/SQLIndex.h"

class SQLASTVisitor;
class AdsVisitor;
class MySqlASTVisitor;

class MySqlKey 
: public SQLUnique, 
virtual public SQLUniqueConstraint,
 virtual public SQLTableConstraint, 
 virtual public SQLIndex
{
public:
  MySqlKey();
  SHAREDOBJECT(MySqlKey);

  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(std::shared_ptr<AdsVisitor > visitor);

  void accept0(std::shared_ptr<MySqlASTVisitor > visitor);

  string_ptr  getIndexType();

  void setIndexType(string_ptr  indexType);

  BOOL_ptr isHasConstraint();

  void setHasConstraint(BOOL_ptr hasConstraint);

  void cloneTo(MySqlKey_ptr x);

  // MySqlKey *clone();
  virtual SQLObject_ptr clone();
  SQLExpr_ptr getKeyBlockSize();

  void setKeyBlockSize(SQLExpr_ptr x);

  virtual SQLName_ptr getName() {};
  virtual void setName(SQLName_ptr value){};
  virtual SQLExpr_ptr getComment() {};
  virtual void setComment(SQLExpr_ptr x) {};
  virtual void simplify() {};
};
